Voice over Internet Protocol (VoIP) includes various technologies for delivery of voice communications and multimedia sessions over Internet Protocol (IP) networks, such as the Internet and cellular networks. One of these technologies may be the Session Initiation Protocol (SIP), which is a signaling protocol for creating, modifying, and terminating the voice communications and the multimedia sessions. A VoIP service may include multiple features or applications, such as call waiting, call forwarding, and call merge. These applications may be implemented as SIP servlets (applications) in SIP application servers that reside in nodes across the IP networks.
Each of the SIP application servers may include a container that manages various concerns of a VoIP application. For example, upon receiving a message for the VoIP application from another VoIP application, the container may dispatch a dedicated control thread, or transaction, to process the message. In doing so, the thread may access data in the server's local database, or may create and use data to be stored in the local database. To prevent data corruption, the container may lock the accessed data from being accessed by another control thread prior to processing the message.
However, these container actions are unknown to containers in other SIP application servers. This may cause problems in a distributed SIP server environment, where a control thread in one server may want to access data in another server that may be locked by a local control thread. In addition, transferring information regarding all actions of containers across multiple SIP application servers may involve transferring complex and large messages and transferring these messages frequently between the containers. Standard specifications for SIP containers are silent regarding these synchronization issues.